<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.12.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>NeuZephyr: D:/Users/Mgepahmge/Documents/C Program/NeuZephyr/src/TensorOperations.cu Source File</title>
<link rel="icon" href="NZ_logo2.png" type="image/x-icon" />
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="NZ_logo2.png"/></td>
  <td id="projectalign">
   <div id="projectname">NeuZephyr
   </div>
   <div id="projectbrief">Simple DL Framework</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.12.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() { codefold.init(0); });
/* @license-end */
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){ initResizable(false); });
/* @license-end */
</script>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_a7e6ee1ae3f772c9504a0b543f2027e2.html">Mgepahmge</a></li><li class="navelem"><a class="el" href="dir_e03f57e346cc4845a4c354a35630b169.html">Documents</a></li><li class="navelem"><a class="el" href="dir_231a0482af2b83c895f27ba7fe745141.html">C Program</a></li><li class="navelem"><a class="el" href="dir_0fa7fc3a0dfd304dbfc9dce9f6facfa2.html">NeuZephyr</a></li><li class="navelem"><a class="el" href="dir_25794e61537e3f33113e2168c9f8da60.html">src</a></li>  </ul>
</div>
</div><!-- top -->
<div id="doc-content">
<div class="header">
  <div class="headertitle"><div class="title">TensorOperations.cu</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="preprocessor">#include &quot;NeuZephyr/TensorOperations.cuh&quot;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="preprocessor">#include &quot;NeuZephyr/NeuZephyrCudaErrorHandling.cuh&quot;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="preprocessor">#include &quot;<a class="code" href="_operation_kernels_8cuh.html">NeuZephyr/OperationKernels.cuh</a>&quot;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="preprocessor">#include &quot;NeuZephyr/NeuZephyrCudaErrorHandling.cuh&quot;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="preprocessor">#include &quot;NeuZephyr/utils.cuh&quot;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span> </div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacenz_1_1data.html">nz::data</a> {</div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span>    <span class="keywordtype">void</span> iRELU(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a8855f411733f7de29d013f4ad40096c9">krnl::RectifiedLinearUnit</a>(grid, block, output, input, size);</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span>    }</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span> </div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span>    <span class="keywordtype">void</span> iSigmoid(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a21bbbcf6d97bfaccc828ce7736814bd4">krnl::Sigmoid</a>(grid, block, output, input, size);</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span>    }</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span>    <span class="keywordtype">void</span> iTanh(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#aeb7d10939b25508e0b5db1fe44f4b467">krnl::Tanh</a>(grid, block, output, input, size);</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span>    }</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span>    <span class="keywordtype">void</span> iLeakyReLU(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size, <span class="keyword">const</span> <span class="keywordtype">float</span> alpha) {</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a04246c5218530f789a0ed4811b7ef3f3">krnl::LeakyReLU</a>(grid, block, output, input, size, alpha);</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span>    }</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span> </div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span>    <span class="keywordtype">void</span> iSwish(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a997aa5460fd64fadf9b701fbf73e3fb2">krnl::Swish</a>(grid, block, output, input, size);</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno">   37</span>    }</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span> </div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span>    <span class="keywordtype">void</span> iELU(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size, <span class="keyword">const</span> <span class="keywordtype">float</span> alpha) {</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno">   42</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a0e82aca250b46ac8ded8cae8936d7e38">krnl::ExponentialLinearUnit</a>(grid, block, output, input, size, alpha);</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>    }</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span>    <span class="keywordtype">void</span> iHardSigmoid(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size, <span class="keyword">const</span> <span class="keywordtype">float</span> alpha,</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span>                      <span class="keyword">const</span> <span class="keywordtype">float</span> beta) {</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a52e449285e560185378234aecaf2f87c">krnl::HardSigmoid</a>(grid, block, output, input, size, alpha, beta);</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span>    }</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span> </div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span>    <span class="keywordtype">void</span> iHardSwish(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size, <span class="keywordtype">float</span> alpha, <span class="keywordtype">float</span> beta) {</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#aef9c028ed356b5684e103639bb23bcf0">krnl::HardSwish</a>(grid, block, output, input, size, alpha, beta);</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span>    }</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span> </div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span>    <span class="keywordtype">void</span> iSoftmax(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> std::vector&lt;float&gt;&amp; sum, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size,</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span>                  <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset) {</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#adbafc409d57fa0a9d78ecac5bf7b10a3">krnl::Softmax</a>(grid, block, output, input, sum, size, offset);</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span>    }</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span> </div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span>    <span class="keywordtype">void</span> iScalarAdd(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">float</span> scalar, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a56f84e531825be8b2b0974c2488eb765">krnl::ScalarAdd</a>(grid, block, output, input, scalar, size);</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span>    }</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span> </div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span>    <span class="keywordtype">void</span> iScalarDiv(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">float</span> scalar, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a27bc4025be4253d5fffae2bf1b43b3af">krnl::ScalarDiv</a>(grid, block, output, input, scalar, size);</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span>    }</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span> </div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span>    <span class="keywordtype">void</span> iScalarMul(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* input, <span class="keywordtype">float</span> scalar, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <span class="keywordtype">long</span> size) {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span>        <span class="keyword">const</span> dim3 grid((size + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a5af716524e248c61f3dce227d8ef6e34">krnl::ScalarMul</a>(grid, block, output, input, scalar, size);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span>    }</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span>    <span class="keywordtype">void</span> iMatrixAdd(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in1, <span class="keywordtype">float</span>* in2, <span class="keyword">const</span> <span class="keywordtype">size_t</span> n, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_o,</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span>                    <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i1, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i2) {</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span>        <span class="keyword">const</span> dim3 grid((n + block.x - 1) / block.x);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a97cda6dfc6545efaee2b686eed9ae766">krnl::MatrixAdd</a>(grid, block, in1, in2, out, n, offset_o, offset_i1, offset_i2);</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span>    }</div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span> </div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span>    <span class="keywordtype">void</span> iMatrixSub(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in1, <span class="keywordtype">float</span>* in2, <span class="keyword">const</span> <span class="keywordtype">size_t</span> n, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_o,</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span>                    <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i1, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i2) {</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span>        <span class="keyword">const</span> dim3 grid((n + block.x - 1) / block.x);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#ad18a2b0efc0cdfc9cb861396ad4da53f">krnl::MatrixSub</a>(grid, block, in1, in2, out, n, offset_o, offset_i1, offset_i2);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span>    }</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span>    <span class="keywordtype">void</span> iElementwiseDivide(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in1, <span class="keywordtype">float</span>* in2, <span class="keyword">const</span> <span class="keywordtype">size_t</span> n, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_o,</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span>                            <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i1, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i2) {</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span>        <span class="keyword">const</span> dim3 grid((n + block.x - 1) / block.x);</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#aa61cded4977bb2dc3720f7057cc2fb47">krnl::ElementwiseDivide</a>(grid, block, out, in1, in2, n, offset_o, offset_i1, offset_i2);</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span>    }</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span>    <span class="keywordtype">void</span> iGeneralMatrixMul(<span class="keywordtype">float</span>* A, <span class="keywordtype">float</span>* B, <span class="keywordtype">float</span>* C, <span class="keyword">const</span> <span class="keywordtype">size_t</span> M, <span class="keyword">const</span> <span class="keywordtype">size_t</span> N, <span class="keyword">const</span> <span class="keywordtype">size_t</span> K,</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span>                           <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offsetC, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offsetA,</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span>                           <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offsetB) {</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span>        <span class="keyword">const</span> dim3 block(TILE_SIZE, TILE_SIZE);</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span>        <span class="keyword">const</span> dim3 grid((N + block.x - 1) / block.x, (M + block.y - 1) / block.y);</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#ae30a6e1de69588aa0c6eb8a5b8e6e826">krnl::GeneralMatrixMul</a>(grid, block, A, B, C, M, N, K, offsetC, offsetA, offsetB);</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span>    }</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span>    <span class="keywordtype">void</span> iTensorCoreGEMM(<span class="keywordtype">float</span>* A, <span class="keywordtype">float</span>* B, <span class="keywordtype">float</span>* C, <span class="keyword">const</span> Dimension&amp; shapeA, <span class="keyword">const</span> Dimension&amp; shapeB,</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span>        <span class="keyword">const</span> Dimension&amp; shapeC) {</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span>        krnl::TensorCoreGEMMParallel(A, B, C, shapeA, shapeB, shapeC);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span>    }</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span> </div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span>    <span class="keywordtype">void</span> iGEMMBackward(<span class="keywordtype">float</span>* A, <span class="keywordtype">float</span>* B, <span class="keywordtype">float</span>* C, <span class="keyword">const</span> Dimension&amp; shapeA, <span class="keyword">const</span> Dimension&amp; shapeB,</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span>        <span class="keyword">const</span> Dimension&amp; shapeC) {</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span>        krnl::GEMMBackwardParallel(A, B, C, shapeA, shapeB, shapeC);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span>    }</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span>    <span class="keywordtype">void</span> iTranspose(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> rows, <span class="keyword">const</span> <span class="keywordtype">size_t</span> cols, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset) {</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span>        <span class="keyword">const</span> dim3 block(TILE_SIZE, TILE_SIZE);</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span>        <span class="keyword">const</span> dim3 grid((rows + block.x - 1) / block.x, (cols + block.y - 1) / block.y);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#afe3f38f788c735b7eb718443eb0fd094">krnl::Transpose</a>(grid, block, in, out, rows, cols, offset);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span>    }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span> </div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span>    <span class="keywordtype">void</span> iSoftmaxJacobian(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> n, <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_o,</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span>        <span class="keyword">const</span> std::vector&lt;size_t&gt;&amp; offset_i) {</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span>        dim3 block(16, 16);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span>        dim3 grid((n + block.x - 1) / block.x, (n + block.y - 1) / block.y);</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a4375738c83ef892783abc210578e5b39">krnl::SoftmaxJacobian</a>(grid, block, out, in, n, offset_o, offset_i);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span>    }</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span> </div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span>    <span class="keywordtype">void</span> iImg2col(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> C, <span class="keyword">const</span> <span class="keywordtype">size_t</span> K_h,</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> K_w, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pad, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in,</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> batch) {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span>        <span class="keyword">const</span> dim3 grid((H_out * W_out * C * K_h * K_w * batch + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a3a781324400c54c35dd564f3599dca8e">krnl::img2col</a>(grid, block, out, in, H_out, W_out, C, K_h, K_w, stride, pad, H_in, W_in, batch);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span>    }</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span> </div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span>    <span class="keywordtype">void</span> iImg2colBackward(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> C,</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> K_h, <span class="keyword">const</span> <span class="keywordtype">size_t</span> K_w, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pad, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in,</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> batch) {</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span>        <span class="keyword">const</span> dim3 grid((H_out * W_out * C * K_h * K_w * batch + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a1c2b7a6f28d2af22f9a2623c5ae62bff">krnl::img2colBackward</a>(grid, block, out, in, H_out, W_out, C, K_h, K_w, stride, pad, H_in, W_in, batch);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span>    }</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span> </div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span>    <span class="keywordtype">void</span> iCol2img(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> C_out,</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span>                  <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches) {</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span>        <span class="keyword">const</span> dim3 grid((H_out * W_out * C_out * batches + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a7c061f5511c3ab9d36563757bd969ff7">krnl::col2img</a>(grid, block, out, in, H_out, W_out, C_out, batches);</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span>    }</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span> </div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span>    <span class="keywordtype">void</span> iCol2imgBackward(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keywordtype">size_t</span> H_out, <span class="keywordtype">size_t</span> W_out, <span class="keywordtype">size_t</span> C_out, <span class="keywordtype">size_t</span> batches) {</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span>        <span class="keyword">const</span> dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span>        <span class="keyword">const</span> dim3 grid((H_out * W_out * C_out * batches + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a028970809074d79f28ff94f62b3edaa4">krnl::col2imgBackward</a>(grid, block, out, in, H_out, W_out, C_out, batches);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span>    }</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span>    <span class="keywordtype">void</span> iAveragePooling(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pool_size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride, <span class="keyword">const</span> <span class="keywordtype">size_t</span> padding,</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches, <span class="keyword">const</span> <span class="keywordtype">size_t</span> channels, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out,</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out) {</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span>        dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span>        dim3 grid((batches * channels * H_out * W_out + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#addaa377a94d007df2690043b08904e28">krnl::AveragePooling</a>(grid, block, out, in, pool_size, stride, padding, batches, channels, H_in, W_in, H_out, W_out);</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span>    }</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span> </div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span>    <span class="keywordtype">void</span> iAveragePoolingBackward(<span class="keywordtype">float</span>* out, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pool_size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride, <span class="keyword">const</span> <span class="keywordtype">size_t</span> padding, <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches,</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> channels, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out) {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span>        dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span>        dim3 grid((batches * channels * H_out * W_out + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a551402f9c55653c9fae63e172a5fb250">krnl::AveragePoolingBackward</a>(grid, block, out, in, pool_size, stride, padding, batches, channels, H_in, W_in,</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span>            H_out, W_out);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span>    }</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span> </div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span>    <span class="keywordtype">void</span> iGlobalAvgPoolBackward(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches, <span class="keyword">const</span> <span class="keywordtype">size_t</span> channels,</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> height, <span class="keyword">const</span> <span class="keywordtype">size_t</span> width) {</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span>        dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>        dim3 grid((batches * channels * height * width + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a73ceb77688c4008dc350fc87b99875aa">krnl::GlobalAvgPoolBackward</a>(grid, block, output, in, batches, channels, height, width);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span>    }</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span>    <span class="keywordtype">void</span> iMaxPooling(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* position, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pool_size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride,</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> padding, <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches, <span class="keyword">const</span> <span class="keywordtype">size_t</span> channels, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in,</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out) {</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span>        dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span>        dim3 grid((batches * channels * H_out * W_out + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#abcc632e5a7104c1a28208e94a4ce6e28">krnl::MaxPooling</a>(grid, block, output, position, input, pool_size, stride, padding, batches, channels, H_in, W_in,</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>            H_out, W_out);</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span>    }</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span> </div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span>    <span class="keywordtype">void</span> iMaxPoolingBackward(<span class="keywordtype">float</span>* output, <span class="keywordtype">float</span>* position, <span class="keywordtype">float</span>* input, <span class="keyword">const</span> <span class="keywordtype">size_t</span> pool_size, <span class="keyword">const</span> <span class="keywordtype">size_t</span> stride,</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> padding, <span class="keyword">const</span> <span class="keywordtype">size_t</span> batches, <span class="keyword">const</span> <span class="keywordtype">size_t</span> channels, <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_in, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_in,</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span>        <span class="keyword">const</span> <span class="keywordtype">size_t</span> H_out, <span class="keyword">const</span> <span class="keywordtype">size_t</span> W_out) {</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span>        dim3 block(BLOCKSIZE);</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span>        dim3 grid((batches * channels * H_out * W_out + BLOCKSIZE - 1) / BLOCKSIZE);</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span>        <a class="code hl_function" href="namespacenz_1_1krnl.html#a0d5f5f4c9e89a8d914a7f2f802d1caab">krnl::MaxPoolingBackward</a>(grid, block, output, position, input, pool_size, stride, padding, batches, channels, H_in, W_in,</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span>            H_out, W_out);</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno">  203</span>    }</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>}</div>
<div class="ttc" id="a_operation_kernels_8cuh_html"><div class="ttname"><a href="_operation_kernels_8cuh.html">OperationKernels.cuh</a></div><div class="ttdoc">CUDA Kernel Definitions for High-Performance Tensor Operations.</div></div>
<div class="ttc" id="anamespacenz_1_1data_html"><div class="ttname"><a href="namespacenz_1_1data.html">nz::data</a></div><div class="ttdoc">Contains data structures and utilities for tensor operations in machine learning workflows.</div><div class="ttdef"><b>Definition</b> <a href="_dimension_8cuh_source.html#l00009">Dimension.cuh:9</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a028970809074d79f28ff94f62b3edaa4"><div class="ttname"><a href="namespacenz_1_1krnl.html#a028970809074d79f28ff94f62b3edaa4">nz::krnl::col2imgBackward</a></div><div class="ttdeci">void col2imgBackward(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t H_out, size_t W_out, size_t C_out, size_t batches)</div><div class="ttdoc">Rearranges columnar data back into image format for backpropagation.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01398">OperationKernels.cu:1398</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a04246c5218530f789a0ed4811b7ef3f3"><div class="ttname"><a href="namespacenz_1_1krnl.html#a04246c5218530f789a0ed4811b7ef3f3">nz::krnl::LeakyReLU</a></div><div class="ttdeci">void LeakyReLU(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n, float alpha=0.01f)</div><div class="ttdoc">Kernel function to apply the Leaky ReLU activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00315">OperationKernels.cu:315</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a0d5f5f4c9e89a8d914a7f2f802d1caab"><div class="ttname"><a href="namespacenz_1_1krnl.html#a0d5f5f4c9e89a8d914a7f2f802d1caab">nz::krnl::MaxPoolingBackward</a></div><div class="ttdeci">void MaxPoolingBackward(dim3 gridDim, dim3 blockDim, float *output, float *position, float *input, size_t pool_size, size_t stride, size_t padding, size_t batches, size_t channels, size_t H_in, size_t W_in, size_t H_out, size_t W_out)</div><div class="ttdoc">Kernel function to compute the gradient of max pooling during backpropagation.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01567">OperationKernels.cu:1567</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a0e82aca250b46ac8ded8cae8936d7e38"><div class="ttname"><a href="namespacenz_1_1krnl.html#a0e82aca250b46ac8ded8cae8936d7e38">nz::krnl::ExponentialLinearUnit</a></div><div class="ttdeci">void ExponentialLinearUnit(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n, float alpha=1.0f)</div><div class="ttdoc">Kernel function to apply the Exponential Linear Unit (ELU) activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00372">OperationKernels.cu:372</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a1c2b7a6f28d2af22f9a2623c5ae62bff"><div class="ttname"><a href="namespacenz_1_1krnl.html#a1c2b7a6f28d2af22f9a2623c5ae62bff">nz::krnl::img2colBackward</a></div><div class="ttdeci">void img2colBackward(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t H_out, size_t W_out, size_t C, size_t K_h, size_t K_w, size_t stride, size_t pad, size_t H_in, size_t W_in, size_t batch)</div><div class="ttdoc">Rearranges columnar data back into image format for backpropagation in convolution operations.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01357">OperationKernels.cu:1357</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a21bbbcf6d97bfaccc828ce7736814bd4"><div class="ttname"><a href="namespacenz_1_1krnl.html#a21bbbcf6d97bfaccc828ce7736814bd4">nz::krnl::Sigmoid</a></div><div class="ttdeci">void Sigmoid(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n)</div><div class="ttdoc">Kernel function to apply the Sigmoid activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00263">OperationKernels.cu:263</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a27bc4025be4253d5fffae2bf1b43b3af"><div class="ttname"><a href="namespacenz_1_1krnl.html#a27bc4025be4253d5fffae2bf1b43b3af">nz::krnl::ScalarDiv</a></div><div class="ttdeci">void ScalarDiv(dim3 gridDim, dim3 blockDim, float *out, float *in, float num, unsigned long long n)</div><div class="ttdoc">Kernel function to perform scalar division on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00183">OperationKernels.cu:183</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a3a781324400c54c35dd564f3599dca8e"><div class="ttname"><a href="namespacenz_1_1krnl.html#a3a781324400c54c35dd564f3599dca8e">nz::krnl::img2col</a></div><div class="ttdeci">void img2col(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t H_out, size_t W_out, size_t C, size_t K_h, size_t K_w, size_t stride, size_t pad, size_t H_in, size_t W_in, size_t batch)</div><div class="ttdoc">Rearranges image data into column format for convolution operations.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01330">OperationKernels.cu:1330</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a4375738c83ef892783abc210578e5b39"><div class="ttname"><a href="namespacenz_1_1krnl.html#a4375738c83ef892783abc210578e5b39">nz::krnl::SoftmaxJacobian</a></div><div class="ttdeci">void SoftmaxJacobian(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n)</div><div class="ttdoc">Kernel function to compute the Jacobian of the Softmax function.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00567">OperationKernels.cu:567</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a52e449285e560185378234aecaf2f87c"><div class="ttname"><a href="namespacenz_1_1krnl.html#a52e449285e560185378234aecaf2f87c">nz::krnl::HardSigmoid</a></div><div class="ttdeci">void HardSigmoid(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n, float alpha=0.2f, float beta=0.5f)</div><div class="ttdoc">Kernel function to apply the Hard Sigmoid activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00403">OperationKernels.cu:403</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a551402f9c55653c9fae63e172a5fb250"><div class="ttname"><a href="namespacenz_1_1krnl.html#a551402f9c55653c9fae63e172a5fb250">nz::krnl::AveragePoolingBackward</a></div><div class="ttdeci">void AveragePoolingBackward(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t pool_size, size_t stride, size_t padding, size_t batches, size_t channels, size_t H_in, size_t W_in, size_t H_out, size_t W_out)</div><div class="ttdoc">Kernel function to compute the gradient of average pooling during backpropagation.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01484">OperationKernels.cu:1484</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a56f84e531825be8b2b0974c2488eb765"><div class="ttname"><a href="namespacenz_1_1krnl.html#a56f84e531825be8b2b0974c2488eb765">nz::krnl::ScalarAdd</a></div><div class="ttdeci">void ScalarAdd(dim3 gridDim, dim3 blockDim, float *out, float *in, float num, unsigned long long n)</div><div class="ttdoc">Kernel function to add a scalar to each element of a matrix on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00196">OperationKernels.cu:196</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a5af716524e248c61f3dce227d8ef6e34"><div class="ttname"><a href="namespacenz_1_1krnl.html#a5af716524e248c61f3dce227d8ef6e34">nz::krnl::ScalarMul</a></div><div class="ttdeci">void ScalarMul(dim3 gridDim, dim3 blockDim, float *out, float *in, float num, unsigned long long n)</div><div class="ttdoc">Kernel function to perform scalar multiplication on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00170">OperationKernels.cu:170</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a73ceb77688c4008dc350fc87b99875aa"><div class="ttname"><a href="namespacenz_1_1krnl.html#a73ceb77688c4008dc350fc87b99875aa">nz::krnl::GlobalAvgPoolBackward</a></div><div class="ttdeci">void GlobalAvgPoolBackward(dim3 gridDim, dim3 blockDim, float *output, float *in, size_t batches, size_t channels, size_t height, size_t width)</div><div class="ttdoc">Kernel function to compute the gradient of global average pooling during backpropagation.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01502">OperationKernels.cu:1502</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a7c061f5511c3ab9d36563757bd969ff7"><div class="ttname"><a href="namespacenz_1_1krnl.html#a7c061f5511c3ab9d36563757bd969ff7">nz::krnl::col2img</a></div><div class="ttdeci">void col2img(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t H_out, size_t W_out, size_t C_out, size_t batches)</div><div class="ttdoc">Rearranges columnar data back into image format.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01378">OperationKernels.cu:1378</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a8855f411733f7de29d013f4ad40096c9"><div class="ttname"><a href="namespacenz_1_1krnl.html#a8855f411733f7de29d013f4ad40096c9">nz::krnl::RectifiedLinearUnit</a></div><div class="ttdeci">void RectifiedLinearUnit(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n)</div><div class="ttdoc">Kernel function to apply the Rectified Linear Unit (ReLU) activation on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00237">OperationKernels.cu:237</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a97cda6dfc6545efaee2b686eed9ae766"><div class="ttname"><a href="namespacenz_1_1krnl.html#a97cda6dfc6545efaee2b686eed9ae766">nz::krnl::MatrixAdd</a></div><div class="ttdeci">void MatrixAdd(dim3 gridDim, dim3 blockDim, float *a, float *b, float *c, unsigned long long n, size_t offset_c=0, size_t offset_a=0, size_t offset_b=0)</div><div class="ttdoc">Kernel function to perform matrix addition on GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00026">OperationKernels.cu:26</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_a997aa5460fd64fadf9b701fbf73e3fb2"><div class="ttname"><a href="namespacenz_1_1krnl.html#a997aa5460fd64fadf9b701fbf73e3fb2">nz::krnl::Swish</a></div><div class="ttdeci">void Swish(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n)</div><div class="ttdoc">Kernel function to apply the Swish activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00344">OperationKernels.cu:344</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_aa61cded4977bb2dc3720f7057cc2fb47"><div class="ttname"><a href="namespacenz_1_1krnl.html#aa61cded4977bb2dc3720f7057cc2fb47">nz::krnl::ElementwiseDivide</a></div><div class="ttdeci">void ElementwiseDivide(dim3 gridDim, dim3 blockDim, float *out, float *in1, float *in2, unsigned long long n, size_t offset_o=0, size_t offset_1=0, size_t offset_2=0)</div><div class="ttdoc">Kernel function to perform element-wise division of two arrays.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01181">OperationKernels.cu:1181</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_abcc632e5a7104c1a28208e94a4ce6e28"><div class="ttname"><a href="namespacenz_1_1krnl.html#abcc632e5a7104c1a28208e94a4ce6e28">nz::krnl::MaxPooling</a></div><div class="ttdeci">void MaxPooling(dim3 gridDim, dim3 blockDim, float *output, float *position, float *input, size_t pool_size, size_t stride, size_t padding, size_t batches, size_t channels, size_t H_in, size_t W_in, size_t H_out, size_t W_out)</div><div class="ttdoc">Kernel function to perform max pooling on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01539">OperationKernels.cu:1539</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_ad18a2b0efc0cdfc9cb861396ad4da53f"><div class="ttname"><a href="namespacenz_1_1krnl.html#ad18a2b0efc0cdfc9cb861396ad4da53f">nz::krnl::MatrixSub</a></div><div class="ttdeci">void MatrixSub(dim3 gridDim, dim3 blockDim, float *a, float *b, float *c, unsigned long long n, size_t offset_c=0, size_t offset_a=0, size_t offset_b=0)</div><div class="ttdoc">Kernel function to perform matrix subtraction on GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00050">OperationKernels.cu:50</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_adbafc409d57fa0a9d78ecac5bf7b10a3"><div class="ttname"><a href="namespacenz_1_1krnl.html#adbafc409d57fa0a9d78ecac5bf7b10a3">nz::krnl::Softmax</a></div><div class="ttdeci">void Softmax(dim3 gridDim, dim3 blockDim, float *out, float *in, float exp_sum_of_input, unsigned long long n, size_t offset=0)</div><div class="ttdoc">Kernel function to apply the Softmax function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00525">OperationKernels.cu:525</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_addaa377a94d007df2690043b08904e28"><div class="ttname"><a href="namespacenz_1_1krnl.html#addaa377a94d007df2690043b08904e28">nz::krnl::AveragePooling</a></div><div class="ttdeci">void AveragePooling(dim3 gridDim, dim3 blockDim, float *out, float *in, size_t pool_size, size_t stride, size_t padding, size_t batches, size_t channels, size_t H_in, size_t W_in, size_t H_out, size_t W_out)</div><div class="ttdoc">Kernel function to perform average pooling on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l01431">OperationKernels.cu:1431</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_ae30a6e1de69588aa0c6eb8a5b8e6e826"><div class="ttname"><a href="namespacenz_1_1krnl.html#ae30a6e1de69588aa0c6eb8a5b8e6e826">nz::krnl::GeneralMatrixMul</a></div><div class="ttdeci">void GeneralMatrixMul(dim3 gridDim, dim3 blockDim, float *A, float *B, float *C, unsigned long long M, unsigned long long N, unsigned long long K, size_t offset_c=0, size_t offset_a=0, size_t offset_b=0)</div><div class="ttdoc">Kernel function to perform single-precision matrix multiplication on GPU using CUDA cores.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00103">OperationKernels.cu:103</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_aeb7d10939b25508e0b5db1fe44f4b467"><div class="ttname"><a href="namespacenz_1_1krnl.html#aeb7d10939b25508e0b5db1fe44f4b467">nz::krnl::Tanh</a></div><div class="ttdeci">void Tanh(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n)</div><div class="ttdoc">Kernel function to apply the Tanh activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00289">OperationKernels.cu:289</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_aef9c028ed356b5684e103639bb23bcf0"><div class="ttname"><a href="namespacenz_1_1krnl.html#aef9c028ed356b5684e103639bb23bcf0">nz::krnl::HardSwish</a></div><div class="ttdeci">void HardSwish(dim3 gridDim, dim3 blockDim, float *out, float *in, unsigned long long n, float alpha=0.2f, float beta=0.5f)</div><div class="ttdoc">Kernel function to apply the Hard Swish activation function on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00445">OperationKernels.cu:445</a></div></div>
<div class="ttc" id="anamespacenz_1_1krnl_html_afe3f38f788c735b7eb718443eb0fd094"><div class="ttname"><a href="namespacenz_1_1krnl.html#afe3f38f788c735b7eb718443eb0fd094">nz::krnl::Transpose</a></div><div class="ttdeci">void Transpose(dim3 gridDim, dim3 blockDim, float *d_A, float *d_B, unsigned int rows, unsigned int cols, size_t offset=0)</div><div class="ttdoc">Kernel function to transpose a matrix on the GPU.</div><div class="ttdef"><b>Definition</b> <a href="_operation_kernels_8cu_source.html#l00147">OperationKernels.cu:147</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.12.0
</small></address>
</div><!-- doc-content -->
</body>
</html>
